// 删掉
import router from '@/router'
import store from '@/store'

// import { asyncRoutes } from '@/router'
// 引入一份进度条插件
import NProgress from 'nprogress'
// 引入进度条样式
import 'nprogress/nprogress.css'
// import { indexOf } from 'core-js/fn/array'

const whiteList = [
  '/login',
  // '404'  需要加斜杠！！
  '/404'
]

router.beforeEach(async(to, from, next) => {
  // 一进入页面的时候就要开启进度条：
  NProgress.start()
  // 一、情况分为两种：有token 以及没有 token：
  // 如果有token：
  if (store.getters.token) {
    // 二、是否是登录页：
    if (to.path === '/login') {
      // 如果是登录页，就跳转到首页：
      next('/')
    //   router.push('/')
    } else {
      // 如果不是登录页，就应该放行，因为有token呀
      // 如果有token；又不是进入登录页；判断一下vuex里面有没有用户信息；
      // 如果没有的话；直接在进入的过程中，获取vuex action里面的数据即可
      if (!store.getters.userId) {
        // 如果没有id：就加上用户信息
        // 这里是刷新： 刷新页面都是没有的
        // 没有userid的时候就要等呀！！所以要await呀！！不然就：不等，跳转，发请求；不等，跳转，发请求；一直死循环，直到userid出现的那一刻呀，才会跳出循环，执行下一步操作，但是呢，已经执行了N多次的请求啦！！
        const { roles } = await store.dispatch('user/getUserInfo')
        // 调用permission里面的函数，将roles传进去
        const myRoutes = await store.dispatch('permission/filterRoutes', roles)
        router.addRoutes(myRoutes)
        // 如果是添加路由, 由于 vue-router 的缺陷
        // 需要在同一个地址在跳转一次才行
        next(to.path)
      } else {
        // 如果不是添加路由, 直接放行
        next()
      }
    }
  } else {
    // 如果没有token：
    // router.replace('/login')
    // indexOf >-1 属于白名单，就放行，因为白名单是不需要token的
    if (whiteList.indexOf(to.path) > -1) {
      next()
    } else {
      //   router.push('/')
      next('/login')
    }
  }
  // 最后  一定要 手动 去 关闭进度条；不关闭的话；手动进入页面时、或者是刷新时；就无法关闭进度条了
  NProgress.done()
})

router.afterEach(() => {
  NProgress.done()
})
